<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
<div id="app">

    <my-button :title="name"></my-button>
    <input v-model="name" />
    <my-header></my-header>
    <my-form-item label="用户名"></my-form-item>
    <my-input mytype="password"></my-input>
    <my-input mytype="text"></my-input>
    <!--<MyHeader /> -->
</div>
<script src="../js/vue.js"></script>
<script>
    const MyHeader = {
        data() {
            return {
                message: 'hello header'
            }
        },
        template: `
            <h3>{{message}}</h3>
        `
    }

    // 根组件
    const app = Vue.createApp({
        data() {
            return {
                name: 'test'
            }
        },
        methods: {},
        components: {
            // 'my-header': MyHeader
            MyHeader // --> my-header
        }
    })
    // 子组件 全局注册的方式 子组件中也可以使用，局部注册的方式，在组件中不能直接使用
    // 局部注册的方式，只能在当前组件中使用 在当前实例中的 components 属性中声明
    app.component('my-div', {
        data() {
            return {
                message: "hello div"
            }
        },
        components: {
            MyHeader
        },
        template: `
          <my-header></my-header>
          <div>{{ message }}</div>
        `
    })

    //
    app.component('my-button', {
        data() {
            return {
                message: "hello button"
            }
        },
        // props 未来使用组件时要用什么属性来传递值
        props: ['title'],
        template: `
          <button>{{ title }}</button>
        `
    })

    // <my-form-item label="value"></my-form-item>
    // 注册组件时候 使用props属性声明要使用的属性名
    app.component('my-form-item', {
        props: ['label'],
        template: `
          <label for="username">{{label}}</label>
        `
    })

    app.component('my-input', {
        props: ['mytype'],
        template: `
            <input :type="mytype" />
        `
    })

    app.mount("#app")
</script>
</body>
</html>
<script setup>
</script>
<script setup>
</script>